package com.chart.web.controller.chart.sta;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.chart.chart.domian.ChartConfigs;
import com.chart.chart.domian.dto.ChartDateTto;
import com.chart.chart.domian.vo.ChartSmartVo;
import com.chart.chart.service.IChartConfigsService;
import com.chart.common.core.controller.BaseController;
import com.chart.common.core.domain.AjaxResult;
import com.chart.common.utils.ChartDataUtils;
import com.chart.common.utils.ExcelDataUtils;
import com.chart.common.utils.ExcelUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * 热力图
 *
 * @author chart
 */
@RestController
@RequestMapping("/heatMap/chart")
public class HeatMapChartController extends BaseController {


    @Autowired
    private IChartConfigsService chartConfigsService;


    //彩色像素热力图
    @PostMapping("/colorPixels/importData")
    public AjaxResult colorPixels(MultipartFile file, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
            workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            //得到填写的数据的最大最小值
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i)) && !getdata.get(i).equals("")) {
                    if (i == 0) {
                        List<String> list = getdata.get(i);
                        for (int i1 = 0; i1 < list.size(); i1++) {
                            if (!ObjectUtils.isEmpty(list.get(i1)) && !list.get(i).equals("")) {
                                xList.add(list.get(i1));
                            }
                        }
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y) && !y.equals("")) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<Object>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String s = dataList.get(j).get(i);
                    if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                        String y = yList.get(j);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(x);
                        cellList.add(y);
                        cellList.add(Double.parseDouble(s));
                        newDataList.add(cellList);
                    }
                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);
            jsonObject.put("series", jsonObjectData);


            String xAxis = JSON.toJSONString(jsonObject.get("xAxis"));
            JSONObject jsonObjectX = JSON.parseObject(xAxis);
            jsonObjectX.put("data", xList);
            jsonObject.put("xAxis", jsonObjectX);

            String yAxis = JSON.toJSONString(jsonObject.get("yAxis"));
            JSONObject jsonObjectY = JSON.parseObject(yAxis);
            jsonObjectY.put("data", yList);
            jsonObject.put("yAxis", jsonObjectY);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }


    //彩色像素热力图
    @PostMapping("/v2/colorPixels/importData")
    public AjaxResult v2colorPixels(@RequestBody List<Map<String, Object>> dataLists, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {

            Sheet sheet = ExcelUtils.convertDataListToSheetRemoveNineAndOne(dataLists);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            //得到填写的数据的最大最小值
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i)) && !getdata.get(i).equals("")) {
                    if (i == 0) {
                        List<String> list = getdata.get(i);
                        for (int i1 = 0; i1 < list.size(); i1++) {
                            if (!ObjectUtils.isEmpty(list.get(i1)) && !list.get(i).equals("")) {
                                xList.add(list.get(i1));
                            }
                        }
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y) && !y.equals("")) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<Object>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String s = dataList.get(j).get(i);
                    if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                        String y = yList.get(j);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(x);
                        cellList.add(y);
                        cellList.add(Double.parseDouble(s));
                        newDataList.add(cellList);
                    }
                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);
            jsonObject.put("series", jsonObjectData);


            String xAxis = JSON.toJSONString(jsonObject.get("xAxis"));
            JSONObject jsonObjectX = JSON.parseObject(xAxis);
            jsonObjectX.put("data", xList);
            jsonObject.put("xAxis", jsonObjectX);

            String yAxis = JSON.toJSONString(jsonObject.get("yAxis"));
            JSONObject jsonObjectY = JSON.parseObject(yAxis);
            jsonObjectY.put("data", yList);
            jsonObject.put("yAxis", jsonObjectY);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }

    //对交线矩阵热力图
    @PostMapping("/diagonalMatrix/importData")
    public AjaxResult diagonalMatrix(MultipartFile file, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
            workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i)) && !getdata.get(i).equals("")) {
                    if (i == 0) {
                        List<String> list = getdata.get(i);
                        for (int i1 = 0; i1 < list.size(); i1++) {
                            if (!ObjectUtils.isEmpty(list.get(i1)) && !list.get(i).equals("")) {
                                xList.add(list.get(i1));
                            }
                        }
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y) && !y.equals("")) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<Object>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size() - i; j++) {
                    String s = dataList.get(j).get(i);
                    if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                        String y = yList.get(j);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(x);
                        cellList.add(y);
                        cellList.add(Double.parseDouble(s));
                        newDataList.add(cellList);
                    }
                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);
            jsonObject.put("series", jsonObjectData);


            String xAxis = JSON.toJSONString(jsonObject.get("xAxis"));
            JSONObject jsonObjectX = JSON.parseObject(xAxis);
            jsonObjectX.put("data", xList);
            jsonObject.put("xAxis", jsonObjectX);

            String yAxis = JSON.toJSONString(jsonObject.get("yAxis"));
            JSONObject jsonObjectY = JSON.parseObject(yAxis);
            jsonObjectY.put("data", yList);
            jsonObject.put("yAxis", jsonObjectY);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }

    //对交线矩阵热力图
    @PostMapping("/diagonalMatrix/v2/importData")
    public AjaxResult v2diagonalMatrix(@RequestBody List<Map<String, Object>> dataLists, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
  /*          workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);*/


            Sheet sheet = ExcelUtils.convertDataListToSheetRemoveNineAndOne(dataLists);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i)) && !getdata.get(i).equals("")) {
                    if (i == 0) {
                        List<String> list = getdata.get(i);
                        for (int i1 = 0; i1 < list.size(); i1++) {
                            if (!ObjectUtils.isEmpty(list.get(i1)) && !list.get(i).equals("")) {
                                xList.add(list.get(i1));
                            }
                        }
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y) && !y.equals("")) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<Object>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size() - i; j++) {
                    String s = dataList.get(j).get(i);
                    if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                        String y = yList.get(j);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(x);
                        cellList.add(y);
                        cellList.add(Double.parseDouble(s));
                        newDataList.add(cellList);
                    }
                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);
            jsonObject.put("series", jsonObjectData);


            String xAxis = JSON.toJSONString(jsonObject.get("xAxis"));
            JSONObject jsonObjectX = JSON.parseObject(xAxis);
            jsonObjectX.put("data", xList);
            jsonObject.put("xAxis", jsonObjectX);

            String yAxis = JSON.toJSONString(jsonObject.get("yAxis"));
            JSONObject jsonObjectY = JSON.parseObject(yAxis);
            jsonObjectY.put("data", yList);
            jsonObject.put("yAxis", jsonObjectY);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }


    //关节和边缘直方图
    @PostMapping("/jAndEStraightness/importData")
    public AjaxResult jAndEStraightness(MultipartFile file, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
            workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            // 获取每一列的数值的和
            List<Double> colDataSum = ExcelDataUtils.getColDataSum(sheet);
            // 获取每一行的数值的和
            List<Double> rowDataSum = ExcelDataUtils.getRowDataSum(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i)) && !getdata.get(i).equals("")) {
                    if (i == 0) {
                        List<String> list = getdata.get(i);
                        for (int i1 = 0; i1 < list.size(); i1++) {
                            if (!ObjectUtils.isEmpty(list.get(i1)) && !list.get(i).equals("")) {
                                xList.add(list.get(i1));
                            }
                        }
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y) && !y.equals("")) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<Object>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String s = dataList.get(j).get(i);
                    if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                        String y = yList.get(j);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(x);
                        cellList.add(y);
                        cellList.add(Double.parseDouble(s));
                        newDataList.add(cellList);
                    }

                }
            }


            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            List<JSONObject> xAxis = (List<JSONObject>) jsonObject.get("xAxis");
            for (int i = 0; i < xAxis.size(); i++) {
                if (i == 0 || i == 1) {
                    JSONObject jsonObject1 = xAxis.get(i);
                    jsonObject1.put("data", xList);
                }
            }


            List<JSONObject> yAxis = (List<JSONObject>) jsonObject.get("yAxis");
            for (int i = 0; i < yAxis.size(); i++) {
                if (i == 0 || i == 2) {
                    JSONObject jsonObject1 = yAxis.get(i);
                    jsonObject1.put("data", yList);
                }
            }

            List<JSONObject> series = (List<JSONObject>) jsonObject.get("series");
            for (int i = 0; i < series.size(); i++) {
                if (i == 0) {
                    JSONObject jsonObject1 = series.get(i);
                    jsonObject1.put("data", newDataList);
                } else if (i == 1) {
                    JSONObject jsonObject1 = series.get(i);
                    jsonObject1.put("data", colDataSum);
                } else {
                    JSONObject jsonObject1 = series.get(i);
                    jsonObject1.put("data", rowDataSum);
                }
            }

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));


            jsonObject.put("visualMap", jsonObjectMinMAx);
            jsonObject.put("xAxis", xAxis);
            jsonObject.put("yAxis", yAxis);
            jsonObject.put("series", series);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }


    //关节和边缘直方图
    @PostMapping("/jAndEStraightness/v2/importData")
    public AjaxResult v2jAndEStraightness(@RequestBody List<Map<String, Object>> dataLists, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
 /*           workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);*/

            Sheet sheet = ExcelUtils.convertDataListToSheetRemoveNineAndOne(dataLists);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            // 获取每一列的数值的和
            List<Double> colDataSum = ExcelDataUtils.getColDataSum(sheet);
            // 获取每一行的数值的和
            List<Double> rowDataSum = ExcelDataUtils.getRowDataSum(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i)) && !getdata.get(i).equals("")) {
                    if (i == 0) {
                        List<String> list = getdata.get(i);
                        for (int i1 = 0; i1 < list.size(); i1++) {
                            if (!ObjectUtils.isEmpty(list.get(i1)) && !list.get(i).equals("")) {
                                xList.add(list.get(i1));
                            }
                        }
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y) && !y.equals("")) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<Object>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String s = dataList.get(j).get(i);
                    if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                        String y = yList.get(j);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(x);
                        cellList.add(y);
                        cellList.add(Double.parseDouble(s));
                        newDataList.add(cellList);
                    }

                }
            }


            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            List<JSONObject> xAxis = (List<JSONObject>) jsonObject.get("xAxis");
            for (int i = 0; i < xAxis.size(); i++) {
                if (i == 0 || i == 1) {
                    JSONObject jsonObject1 = xAxis.get(i);
                    jsonObject1.put("data", xList);
                }
            }


            List<JSONObject> yAxis = (List<JSONObject>) jsonObject.get("yAxis");
            for (int i = 0; i < yAxis.size(); i++) {
                if (i == 0 || i == 2) {
                    JSONObject jsonObject1 = yAxis.get(i);
                    jsonObject1.put("data", yList);
                }
            }

            List<JSONObject> series = (List<JSONObject>) jsonObject.get("series");
            for (int i = 0; i < series.size(); i++) {
                if (i == 0) {
                    JSONObject jsonObject1 = series.get(i);
                    jsonObject1.put("data", newDataList);
                } else if (i == 1) {
                    JSONObject jsonObject1 = series.get(i);
                    jsonObject1.put("data", colDataSum);
                } else {
                    JSONObject jsonObject1 = series.get(i);
                    jsonObject1.put("data", rowDataSum);
                }
            }

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));


            jsonObject.put("visualMap", jsonObjectMinMAx);
            jsonObject.put("xAxis", xAxis);
            jsonObject.put("yAxis", yAxis);
            jsonObject.put("series", series);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }


    //热力图 - 颜色的离散映射图
    @PostMapping("/colorMapping/importData")
    public AjaxResult colorMapping(MultipartFile file, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
            workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }


            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            String dispersedV = getdata.get(2).get(1);
            getdata.remove(0);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i))) {
                    if (i == 0) {
                        xList = getdata.get(i);
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y)) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<String>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String y = yList.get(j);
                    List<String> cellList = new ArrayList<>();
                    cellList.add(x);
                    cellList.add(y);

                    cellList.add(dataList.get(j).get(i));
                    newDataList.add(cellList);
                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObjectMinMAx.put("splitNumber", Double.parseDouble(dispersedV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);
            jsonObject.put("series", jsonObjectData);


            String xAxis = JSON.toJSONString(jsonObject.get("xAxis"));
            JSONObject jsonObjectX = JSON.parseObject(xAxis);
            jsonObjectX.put("data", xList);
            jsonObject.put("xAxis", jsonObjectX);

            String yAxis = JSON.toJSONString(jsonObject.get("yAxis"));
            JSONObject jsonObjectY = JSON.parseObject(yAxis);
            jsonObjectY.put("data", yList);
            jsonObject.put("yAxis", jsonObjectY);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }


    //热力图 - 颜色的离散映射图
    @PostMapping("/colorMapping/v2/importData")
    public AjaxResult v2colorMapping(@RequestBody List<Map<String, Object>> dataLists, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
          /*  workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);*/

            Sheet sheet = ExcelUtils.convertDataListToSheetRemoveNineAndOne(dataLists);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }


            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            String dispersedV = getdata.get(2).get(1);
            getdata.remove(0);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i))) {
                    if (i == 0) {
                        xList = getdata.get(i);
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y)) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<String>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String y = yList.get(j);
                    List<String> cellList = new ArrayList<>();
                    cellList.add(x);
                    cellList.add(y);

                    cellList.add(dataList.get(j).get(i));
                    newDataList.add(cellList);
                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObjectMinMAx.put("splitNumber", Double.parseDouble(dispersedV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);
            jsonObject.put("series", jsonObjectData);


            String xAxis = JSON.toJSONString(jsonObject.get("xAxis"));
            JSONObject jsonObjectX = JSON.parseObject(xAxis);
            jsonObjectX.put("data", xList);
            jsonObject.put("xAxis", jsonObjectX);

            String yAxis = JSON.toJSONString(jsonObject.get("yAxis"));
            JSONObject jsonObjectY = JSON.parseObject(yAxis);
            jsonObjectY.put("data", yList);
            jsonObject.put("yAxis", jsonObjectY);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }


    //热力图 - 大数据量
    @PostMapping("/bigData/importData")
    public AjaxResult bigData(MultipartFile file, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
            workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i)) && !getdata.get(i).equals("")) {
                    if (i == 0) {
                        List<String> list = getdata.get(i);
                        for (int i1 = 0; i1 < list.size(); i1++) {
                            if (!ObjectUtils.isEmpty(list.get(i1)) && !list.get(i).equals("")) {
                                xList.add(list.get(i1));
                            }
                        }
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y) && !y.equals("")) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<Object>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String s = dataList.get(j).get(i);
                    if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                        String y = yList.get(j);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(x);
                        cellList.add(y);
                        cellList.add(Double.parseDouble(s));
                        newDataList.add(cellList);
                    }

                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);
            jsonObject.put("series", jsonObjectData);


            String xAxis = JSON.toJSONString(jsonObject.get("xAxis"));
            JSONObject jsonObjectX = JSON.parseObject(xAxis);
            jsonObjectX.put("data", xList);
            jsonObject.put("xAxis", jsonObjectX);

            String yAxis = JSON.toJSONString(jsonObject.get("yAxis"));
            JSONObject jsonObjectY = JSON.parseObject(yAxis);
            jsonObjectY.put("data", yList);
            jsonObject.put("yAxis", jsonObjectY);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }


    //热力图 - 大数据量
    @PostMapping("/bigData/v2/importData")
    public AjaxResult v2bigData(@RequestBody List<Map<String, Object>> dataLists
            , Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
    /*        workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);*/

            Sheet sheet = ExcelUtils.convertDataListToSheetRemoveNineAndOne(dataLists);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i)) && !getdata.get(i).equals("")) {
                    if (i == 0) {
                        List<String> list = getdata.get(i);
                        for (int i1 = 0; i1 < list.size(); i1++) {
                            if (!ObjectUtils.isEmpty(list.get(i1)) && !list.get(i).equals("")) {
                                xList.add(list.get(i1));
                            }
                        }
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y) && !y.equals("")) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<Object>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String s = dataList.get(j).get(i);
                    if (!ObjectUtils.isEmpty(s) && !s.equals("")) {
                        String y = yList.get(j);
                        List<Object> cellList = new ArrayList<>();
                        cellList.add(x);
                        cellList.add(y);
                        cellList.add(Double.parseDouble(s));
                        newDataList.add(cellList);
                    }

                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);
            jsonObject.put("series", jsonObjectData);


            String xAxis = JSON.toJSONString(jsonObject.get("xAxis"));
            JSONObject jsonObjectX = JSON.parseObject(xAxis);
            jsonObjectX.put("data", xList);
            jsonObject.put("xAxis", jsonObjectX);

            String yAxis = JSON.toJSONString(jsonObject.get("yAxis"));
            JSONObject jsonObjectY = JSON.parseObject(yAxis);
            jsonObjectY.put("data", yList);
            jsonObject.put("yAxis", jsonObjectY);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }

    @PostMapping("/calendar/importData")
    public AjaxResult calendar(@RequestBody ChartDateTto chartDateTto) throws Exception {

        // 提取数据
        List<List<String>> getData = ChartDataUtils.extractDataFromList(chartDateTto.getDataList());

        if (CollectionUtils.isEmpty(getData)) {
            return AjaxResult.error("请填充数据");
        }

        if (ObjectUtils.isEmpty(getData.get(0).get(1))) {
            return AjaxResult.error("请填充年份数据");
        }

        if (ObjectUtils.isEmpty(getData.get(0).get(1))) {
            return AjaxResult.error("请填充最小值数据");
        }

        if (ObjectUtils.isEmpty(getData.get(1).get(1))) {
            return AjaxResult.error("请填充最大值数据");
        }

        // 提取并处理最小值、最大值和年份
        String minV = getData.get(0).get(1);
        String maxV = getData.get(1).get(1);
        String yearV = getData.get(2).get(1);

        if (yearV.contains(".")) {
            yearV = yearV.substring(0, yearV.indexOf("."));
        }

        // 移除已处理的数据
        getData.remove(0);
        getData.remove(0);
        getData.remove(0);

        // 处理日期和数据
        List<String> dateList = new ArrayList<>();
        List<String> monList = new ArrayList<>();
        List<List<String>> dataList = new ArrayList<>();

        for (int i = 0; i < getData.size(); i++) {
            if (!ObjectUtils.isEmpty(getData.get(i))) {
                if (i == 0) {
                    dateList = getData.get(i);
                } else {
                    String y = getData.get(i).get(0);
                    if (!ObjectUtils.isEmpty(y)) {
                        monList.add(y);
                    }
                    getData.get(i).remove(0);
                    dataList.add(getData.get(i));
                }
            }
        }

        // 生成新的数据列表
        List<List<String>> newDataList = new ArrayList<>();
        dateList.remove(0);

        for (int i = 0; i < monList.size(); i++) {
            String mon = monList.get(i);
            if (mon.contains(".")) {
                mon = mon.substring(0, mon.indexOf("."));
            }
            for (int j = 0; j < dateList.size(); j++) {
                String date = dateList.get(j);
                List<String> cellList = new ArrayList<>();
                if (date.contains(".")) {
                    date = date.substring(0, date.indexOf("."));
                }
                String s = yearV + "-" + mon + "-" + date;
                cellList.add(s);
                cellList.add(dataList.get(i).get(j));
                newDataList.add(cellList);
            }
        }

        // 解析并更新 JSON 对象
        JSONObject jsonObject;
        try {
            jsonObject = JSON.parseObject(chartDateTto.getChartValue());
        } catch (Exception e) {
            return AjaxResult.error("解析 chartValue 时出错: " + e.getMessage());
        }

        // 处理 visualMap
        try {
            Object visualMapObj = jsonObject.get("visualMap");

            if (visualMapObj == null) {
                return AjaxResult.error("visualMap 不存在");
            }

            if (visualMapObj instanceof JSONArray) {
                JSONArray visualMapArray = (JSONArray) visualMapObj;
                for (int i = 0; i < visualMapArray.size(); i++) {
                    JSONObject visualMapItem = visualMapArray.getJSONObject(i);
                    visualMapItem.put("min", Double.parseDouble(minV));
                    visualMapItem.put("max", Double.parseDouble(maxV));
                }
                jsonObject.put("visualMap", visualMapArray);
            } else {
                return AjaxResult.error("visualMap 类型不支持: " + visualMapObj.getClass().getName());
            }
        } catch (Exception e) {
            return AjaxResult.error("处理 visualMap 时出错: " + e.getMessage());
        }

        // 处理 series 数据
        try {
            Object seriesObj = jsonObject.get("series");

            if (seriesObj == null) {
                return AjaxResult.error("series 不存在");
            }

            if (seriesObj instanceof JSONArray) {
                JSONArray seriesArray = (JSONArray) seriesObj;
                for (int i = 0; i < seriesArray.size(); i++) {
                    JSONObject seriesItem = seriesArray.getJSONObject(i);
                    seriesItem.put("data", newDataList);
                }
                jsonObject.put("series", seriesArray);
            } else if (seriesObj instanceof JSONObject) {
                // 如果 series 不是数组而是单个对象，处理单个对象的情况
                JSONObject seriesItem = (JSONObject) seriesObj;
                seriesItem.put("data", newDataList);
                jsonObject.put("series", seriesItem);
            } else {
                return AjaxResult.error("series 类型不支持: " + seriesObj.getClass().getName());
            }
        } catch (Exception e) {
            return AjaxResult.error("处理 series 时出错: " + e.getMessage());
        }

        // calendar字段保持不变，不进行处理
        // 返回处理后的结果
        List<ChartSmartVo> newList = new ArrayList<>();
        ChartSmartVo chartSmartVo = new ChartSmartVo();
        chartSmartVo.setConfigValue(JSON.toJSONString(jsonObject));
        newList.add(chartSmartVo);
        return AjaxResult.success(newList);
    }

/*    //日历热力图
    @PostMapping("/calendar/importData")
    public AjaxResult calendar(@RequestBody ChartDateTto chartDateTto) throws Exception {

// 提取数据
        List<List<String>> getData = ChartDataUtils.extractDataFromList(chartDateTto.getDataList());

        if (CollectionUtils.isEmpty(getData)) {
            return AjaxResult.error("请填充数据");
        }

        if (ObjectUtils.isEmpty(getData.get(0).get(1))) {
            return AjaxResult.error("请填充年份数据");
        }

        if (ObjectUtils.isEmpty(getData.get(0).get(1))) {
            return AjaxResult.error("请填充最小值数据");
        }

        if (ObjectUtils.isEmpty(getData.get(1).get(1))) {
            return AjaxResult.error("请填充最大值数据");
        }

// 提取并处理最小值、最大值和年份
        String minV = getData.get(0).get(1);
        String maxV = getData.get(1).get(1);
        String yearV = getData.get(2).get(1);

        if (yearV.contains(".")) {
            yearV = yearV.substring(0, yearV.indexOf("."));
        }

// 移除已处理的数据
        getData.remove(0);
        getData.remove(0);
        getData.remove(0);

// 处理日期和数据
        List<String> dateList = new ArrayList<>();
        List<String> monList = new ArrayList<>();
        List<List<String>> dataList = new ArrayList<>();

        for (int i = 0; i < getData.size(); i++) {
            if (!ObjectUtils.isEmpty(getData.get(i))) {
                if (i == 0) {
                    dateList = getData.get(i);
                } else {
                    String y = getData.get(i).get(0);
                    if (!ObjectUtils.isEmpty(y)) {
                        monList.add(y);
                    }
                    getData.get(i).remove(0);
                    dataList.add(getData.get(i));
                }
            }
        }

// 生成新的数据列表
        List<List<String>> newDataList = new ArrayList<>();
        dateList.remove(0);

        for (int i = 0; i < monList.size(); i++) {
            String mon = monList.get(i);
            if (mon.contains(".")) {
                mon = mon.substring(0, mon.indexOf("."));
            }
            for (int j = 0; j < dateList.size(); j++) {
                String date = dateList.get(j);
                List<String> cellList = new ArrayList<>();
                if (date.contains(".")) {
                    date = date.substring(0, date.indexOf("."));
                }
                String s = yearV + "-" + mon + "-" + date;
                cellList.add(s);
                cellList.add(dataList.get(i).get(j));
                newDataList.add(cellList);
            }
        }

// 解析并更新 JSON 对象
        JSONObject jsonObject;
        try {
            jsonObject = JSON.parseObject(chartDateTto.getChartValue());
        } catch (Exception e) {
            return AjaxResult.error("解析 chartValue 时出错: " + e.getMessage());
        }

// 处理 visualMap
        try {
            Object visualMapObj = jsonObject.get("visualMap");

            if (visualMapObj == null) {
                return AjaxResult.error("visualMap 不存在");
            }

            if (visualMapObj instanceof JSONArray) {
                JSONArray visualMapArray = (JSONArray) visualMapObj;
                for (int i = 0; i < visualMapArray.size(); i++) {
                    JSONObject visualMapItem = visualMapArray.getJSONObject(i);
                    visualMapItem.put("min", Double.parseDouble(minV));
                    visualMapItem.put("max", Double.parseDouble(maxV));
                }
                jsonObject.put("visualMap", visualMapArray);
            } else {
                return AjaxResult.error("visualMap 类型不支持: " + visualMapObj.getClass().getName());
            }
        } catch (Exception e) {
            return AjaxResult.error("处理 visualMap 时出错: " + e.getMessage());
        }

// 处理 series 数据
        try {
            Object seriesObj = jsonObject.get("series");

            if (seriesObj == null) {
                return AjaxResult.error("series 不存在");
            }

            if (seriesObj instanceof JSONArray) {
                JSONArray seriesArray = (JSONArray) seriesObj;
                for (int i = 0; i < seriesArray.size(); i++) {
                    JSONObject seriesItem = seriesArray.getJSONObject(i);
                    seriesItem.put("data", newDataList);
                }
                jsonObject.put("series", seriesArray);
            } else if (seriesObj instanceof JSONObject) {
                // 如果 series 不是数组而是单个对象，处理单个对象的情况
                JSONObject seriesItem = (JSONObject) seriesObj;
                seriesItem.put("data", newDataList);
                jsonObject.put("series", seriesItem);
            } else {
                return AjaxResult.error("series 类型不支持: " + seriesObj.getClass().getName());
            }
        } catch (Exception e) {
            return AjaxResult.error("处理 series 时出错: " + e.getMessage());
        }

        // 更新或创建 calendar 数据
        try {
            JSONObject calendar = jsonObject.getJSONObject("calendar");
            if (calendar == null) {
                calendar = new JSONObject(); // 如果 calendar 不存在，则创建一个新的
            }
            calendar.put("range", yearV);
            jsonObject.put("calendar", calendar); // 更新或添加 calendar
        } catch (Exception e) {
            return AjaxResult.error("处理 calendar 时出错: " + e.getMessage());
        }

// 返回处理后的结果
        List<ChartSmartVo> newList = new ArrayList<>();
        ChartSmartVo chartSmartVo = new ChartSmartVo();
        chartSmartVo.setConfigValue(JSON.toJSONString(jsonObject));
        newList.add(chartSmartVo);
        return AjaxResult.success(newList);



    }*/


    //日历热力图
    @PostMapping("/calendar/v2/importData")
    public AjaxResult v2calendar(@RequestBody List<Map<String, Object>> dataLists
            , Long configId) throws Exception {
        //    XSSFWorkbook workbook = null;
        try {
            /*workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);*/

            Sheet sheet = ExcelUtils.convertDataListToSheetRemoveNineAndOne(dataLists);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充年份数据");
            }

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);

            String yearV = getdata.get(2).get(1);
            if (yearV.contains(".")) {
                yearV = yearV.substring(0, yearV.indexOf("."));
            }
            getdata.remove(0);
            getdata.remove(0);
            getdata.remove(0);


            List<String> dateList = new ArrayList<>();
            List<String> monList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i))) {
                    if (i == 0) {
                        dateList = getdata.get(i);
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y)) {
                            monList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<String>> newDataList = new ArrayList<>();
            dateList.remove(0);
            for (int i = 0; i < monList.size(); i++) {
                String mon = monList.get(i);
                if (mon.contains(".")) {
                    mon = mon.substring(0, mon.indexOf("."));
                }
                for (int j = 0; j < dateList.size(); j++) {
                    String date = dateList.get(j);
                    List<String> cellList = new ArrayList<>();
                    if (date.contains(".")) {
                        date = date.substring(0, date.indexOf("."));
                    }


                    String s = yearV + "-" + mon + "-" + date;
                    cellList.add(s);
                    cellList.add(dataList.get(i).get(j));
                    newDataList.add(cellList);
                }
            }


            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            String dataAxis = JSON.toJSONString(jsonObject.get("series"));
            JSONObject jsonObjectData = JSON.parseObject(dataAxis);
            jsonObjectData.put("data", newDataList);

            JSONObject calendar = (JSONObject) jsonObject.get("calendar");
            calendar.put("range", yearV);

            jsonObject.put("calendar", calendar);
            jsonObject.put("series", jsonObjectData);


            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
//            workbook.close();
        }
    }

    //热力图与百度地图扩展
    @PostMapping("/map/v2/importData")
    public AjaxResult v2map(@RequestBody List<Map<String, Object>> dataLists
            , Long configId) throws Exception {
        //    XSSFWorkbook workbook = null;
        try {
    /*        workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);*/

            Sheet sheet = ExcelUtils.convertDataListToSheetRemoveNineAndOne(dataLists);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }
            List<String> minList = getdata.get(0);
            List<String> maxList = getdata.get(1);

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);

            List<String> centerList = getdata.get(2);
            centerList.remove(0);

            getdata.remove(0);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i))) {
                    if (i == 0) {
                        xList = getdata.get(i);
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y)) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<String>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String y = yList.get(j);
                    List<String> cellList = new ArrayList<>();
                    cellList.add(x);
                    cellList.add(y);

                    cellList.add(dataList.get(j).get(i));
                    newDataList.add(cellList);
                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            JSONObject bmap = (JSONObject) jsonObject.get("bmap");
            bmap.put("center", centerList);
            jsonObject.put("bmap", bmap);

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            List<JSONObject> series = (List<JSONObject>) jsonObject.get("series");
            JSONObject serie = series.get(0);
            serie.put("data", newDataList);

            jsonObject.put("series", series);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
//            workbook.close();
        }
    }

    //热力图与百度地图扩展
    @PostMapping("/map/importData")
    public AjaxResult map(MultipartFile file, Long configId) throws Exception {
        XSSFWorkbook workbook = null;
        try {
            workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(1);
            //获取
            List<List<String>> getdata = ExcelDataUtils.getData(sheet);

            if (CollectionUtils.isEmpty(getdata)) {
                return AjaxResult.error("请填充数据");
            }
            List<String> minList = getdata.get(0);
            List<String> maxList = getdata.get(1);

            if (ObjectUtils.isEmpty(getdata.get(0).get(1))) {
                return AjaxResult.error("请填充最小值数据");
            }
            if (ObjectUtils.isEmpty(getdata.get(1).get(1))) {
                return AjaxResult.error("请填充最大值数据");
            }
            String minV = getdata.get(0).get(1);
            String maxV = getdata.get(1).get(1);

            List<String> centerList = getdata.get(2);
            centerList.remove(0);

            getdata.remove(0);
            getdata.remove(0);
            getdata.remove(0);


            List<String> xList = new ArrayList<>();
            List<String> yList = new ArrayList<>();
            List<List<String>> dataList = new ArrayList<>();
            for (int i = 0; i < getdata.size(); i++) {
                if (!ObjectUtils.isEmpty(getdata.get(i))) {
                    if (i == 0) {
                        xList = getdata.get(i);
                    } else {
                        String y = getdata.get(i).get(0);
                        if (!ObjectUtils.isEmpty(y)) {
                            yList.add(y);
                        }
                        getdata.get(i).remove(0);
                        dataList.add(getdata.get(i));
                    }
                }
            }

            List<List<String>> newDataList = new ArrayList<>();
            xList.remove(0);
            for (int i = 0; i < xList.size(); i++) {
                String x = xList.get(i);
                for (int j = 0; j < yList.size(); j++) {
                    String y = yList.get(j);
                    List<String> cellList = new ArrayList<>();
                    cellList.add(x);
                    cellList.add(y);

                    cellList.add(dataList.get(j).get(i));
                    newDataList.add(cellList);
                }
            }

            ChartConfigs configs = chartConfigsService.getById(configId);
            JSONObject jsonObject = JSON.parseObject(configs.getConfigValue());

            JSONObject bmap = (JSONObject) jsonObject.get("bmap");
            bmap.put("center", centerList);
            jsonObject.put("bmap", bmap);

            String minMaxAxis = JSON.toJSONString(jsonObject.get("visualMap"));
            JSONObject jsonObjectMinMAx = JSON.parseObject(minMaxAxis);
            jsonObjectMinMAx.put("min", Double.parseDouble(minV));
            jsonObjectMinMAx.put("max", Double.parseDouble(maxV));
            jsonObject.put("visualMap", jsonObjectMinMAx);


            List<JSONObject> series = (List<JSONObject>) jsonObject.get("series");
            JSONObject serie = series.get(0);
            serie.put("data", newDataList);

            jsonObject.put("series", series);

            return AjaxResult.success(JSON.toJSONString(jsonObject));
        } finally {
            workbook.close();
        }
    }
}
